<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Source</name>
    </assembly>
    <members>
        <member name="T:IAggregateRoot`1">
            <summary>
            Base interface that must be implemented by all aggregate root entities. 
            </summary>
            <remarks>
            This interface simply provides the <see cref="P:IAggregateRoot`1.IsDeleted"/> on top of 
            what <see cref="T:IIdentifiable`1"/> provides, enforcing the rule that that 
            aggregate are never deleted using the domain model, they are 
            simply marked as deleted.
            <para>
            Accessing the underlying context implementation though, aggregate 
            roots can be deleted anyway as usual in EF/NH (i.e. in migration scenarios, 
            tests, etc., it might be needed).
            </para>
            </remarks>
        </member>
        <member name="T:IIdentifiable`1">
            <summary>
            Base interface that must be implented by all domain entities. 
            Types that do not have their separate table (a.k.a. "complex types" 
            in EF or "components" in NH) just don't implement this interface.
            </summary>
        </member>
        <member name="P:IIdentifiable`1.Id">
            <summary>
            Gets or sets the id.
            </summary>
        </member>
        <member name="P:IAggregateRoot`1.IsDeleted">
            <summary>
            Gets or sets a value indicating whether the entity is deleted. 
            Aggregate root entities are never deleted using the domain model, they are 
            simply marked as deleted.
            </summary>
        </member>
        <member name="T:IDomainContext`1">
            <summary>
            Provides access to the domain aggregate roots.
            </summary>
        </member>
        <member name="M:IDomainContext`1.SaveChanges">
            <summary>
            Saves all changes made in this context to the underlying database.
            </summary>
        </member>
        <member name="M:IDomainContext`1.New``1(System.Action{``0})">
            <summary>
            Creates a new instance of an aggregate root.
            </summary>
            <remarks>
            Although not strictly required, using this method for creating new 
            aggregate roots allows the context to perform additional initialization 
            if needed.
            </remarks>
            <typeparam name="T">Type of aggregate root to instantiate.</typeparam>
        </member>
        <member name="M:IDomainContext`1.Find``1(`0)">
            <summary>
            Finds the aggregate root with the specified id.
            </summary>
            <returns>The found aggregate or <see langword="null"/>.</returns>
        </member>
        <member name="M:IDomainContext`1.Save``1(``0)">
            <summary>
            Inserts or updates the specified aggregate root.
            </summary>
        </member>
        <member name="M:IDomainContext`1.Delete``1(`0)">
            <summary>
            Logically deletes the specified aggregate root.
            </summary>
        </member>
        <member name="M:IDomainContext`1.Delete``1(``0)">
            <summary>
            Logically deletes the aggregate root with the specified identifier.
            </summary>
        </member>
        <member name="T:IDomainContextConsumer`1">
            <summary>
            Interface implemented by entities that need to 
            access the owning domain context to implement 
            their business logic.
            </summary>
            <remarks>
            Some aggregate roots may need to create and save 
            other aggregate roots in the context, and in order to do 
            it, they can implement this interface. Domain 
            context implementations should check for this interface 
            when the entities are being materialized or 
            constructed via <see cref="M:IDomainContext`1.New``1(System.Action{``0})"/> 
            to set the property value.
            </remarks>
        </member>
        <member name="P:IDomainContextConsumer`1.Context">
            <summary>
            Gets or sets the owning domain context.
            </summary>
        </member>
    </members>
</doc>
